/*
 * <nav_recip_common/scalar.h>
 * nav_recip_common
 *
 *
 * Copyright (c) 2008-2012, University of North Carolina at Chapel Hill
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   * Redistributions of source code must retain the above copyright notice,
 *     this list of conditions and the following disclaimer.
 *   * Redistributions in binary form must reproduce the above copyright notice,
 *     this list of conditions and the following disclaimer in the documentation
 *     and/or other materials provided with the distribution.
 *   * Neither the name of the University of North Carolina at Chapel Hill nor
 *     the names of its contributors may be used to endorse or promote products
 *     derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * Please send all bug reports to <geom@cs.unc.edu>.
 *
 * The authors may be contacted via:
 *
 *     Dept. of Computer Science
 *     201 S. Columbia St.
 *     Frederick P. Brooks, Jr. Computer Science Bldg.
 *     Chapel Hill, N.C. 27599-3175
 *     United States of America
 *
 *     http://gamma.cs.unc.edu/ROS/
 */

#ifndef NAV_RECIP_COMMON_SCALAR_H_
#define NAV_RECIP_COMMON_SCALAR_H_

/*!
 * \headerfile <nav_recip_common/scalar.h>
 */

#include <cfloat>
#include <cmath>
#include <ros/macros.h>

namespace nav_recip
{
/*!
 * A constant scalar value equal to pi.
 */
#ifdef M_PI
const float NAV_RECIP_PI = static_cast<float>(M_PI);
#else
const float NAV_RECIP_PI = 3.14159265358979323846264338327950288f;
#endif

/*!
 * A small constant scalar value used for comparisons with zero.
 */
#ifdef FLT_EPSILON
const float NAV_RECIP_EPSILON = 10.0f * static_cast<float>(FLT_EPSILON);
#else
const float NAV_RECIP_EPSILON = 1.0e-4f;
#endif
  
/*!
 * Return the second argument if the first argument is greater than or equal to
 * zero or otherwise return the third argument if the first argument is less
 * than zero.
 */
ROS_FORCE_INLINE ROS_HELPER_LOCAL float FSel(float compare_to_zero, float greater_than, float less_than)
{
  return compare_to_zero >= 0.0f ? greater_than : less_than;
}
}

#endif // NAV_RECIP_COMMON_SCALAR_H_
